package com.qf.factory;

import java.util.Properties;

/**
 * 自定义bean工厂
 * @author
 */
public class MyBeanFactory {

    private Properties properties = new Properties();

    /**
     * 无参数构造
     */
    public MyBeanFactory() {
    }

    /**
     * 有参数构造
     * @param config 配置文件名字
     */
    public MyBeanFactory(String config) throws Exception {
        //通过输入流根据配置文件的名字和路径, 读取配置文件到properties对象中
        properties.load(MyBeanFactory.class.getResourceAsStream(config));
    }

    /**
     * 获取java类对象, 也就是JavaBean对象, 对象由这个工厂产生
     */
    public Object getBean(String beanName) throws Exception {
        //1. 获取类的路径, 也就是实现类的全限定名
        //例如 : com.qf.service.UserServiceImpl1
        String classPath = properties.getProperty(beanName);

        //2. 判断这个路径是否为空, 如果不为空再用反射获取类对象
        if(classPath != null) {
            //3. 如果不为空那么使用反射加载类的对象
            Class clazz = Class.forName(classPath);
            //4. 获取对象的实例返回
            return clazz.newInstance();
        }


        //5. 如果为空返回null
        return null;
    }



}
